<?php namespace Common\Model; 

use Hdphp\Model\Model;
//商品分类模型
class Category extends Model{
	// 指定表名
	protected $table='category';
	// 自定验证
	protected $validate=array(
		array('cname','required','分类名称不能为空',3,3),
		array('csort','required','排序不能为空',3,3),
		);

	// 添加
	public function store(){
		// 触发自动验证
		if(!$this->create()) return false;
		$this->add();
		return true;
	}

	// 编辑
	public function edit(){
		// 获取隐藏域的post提交过来的cid
		$cid=Q('post.cid',0,'intval');
		// 如果验证失败那就返回错误信息
		if(!$this->create()) return false;
		// 如果验证成功那就将数据插入数据库
		$this->where("cid={$cid}")->save();
		return true;
	}

	// 获取除了他自己以及他自己的子集以外的所有数据
	public function getNoMine($cid){
		//1.获取子自身和自身所有的cid
		$cids=$this->getSon($this->get(),$cid);//调用getSon方法获取
		// 将自己cid压入
		$cids[]=$cid;
		// 2.查询cid不在$cids这个id集合里面的所有数据
		$data=$this->where("cid NOT IN (".implode(',',$cids).")")->get();
		// 将查到的数据变成树状结构返回
		return Data::tree($data,'cname');

	}
	
	

	// 获取当前分类所有的对应的子级
	public function getSon($data,$cid){
		// 给一个静态的空数组、【将找到的所有子集存起来】
		$temp=array();
		// 循环
		foreach ($data as $value) {
			
			if($value['pid']==$cid){
				// 将获取的所有自己的cid存入数组
				$temp[]=$value['cid'];
				// 调用自己继续递归查找，，直到查询完
//				$this->getSon($data,$value['cid']);
			$temp=array_merge($temp,$this->getSon($data,$value['cid']));
			}
		}
		// 返回查到的数据
		return $temp;
	}
	
	

	public function del($cid){
		// 查询要删除的分类的pid【也就是父级的pid】
		$pid=$this->where("cid={$cid}")->pluck('pid');
		// sp($pid);die;
		// 将分类上移一级
		// 获取被删除的分类的子集，，把他的pid变成被删除的pid
		$this->where("pid={$cid}")->save(array('pid'=>$pid));
		// 然后将该分类删除
		$this->delete($cid);

	}
}